home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 34 / Amiga Format CD34 (1998-11-20)(Future Publishing)(GB)[!][Christmas issue].iso / -websites- / amosfactory / downloads / amosgrab.lha / AMOSGrab_100.AMOS / AMOSGrab_100.amosSourceCode
AMOS Source Code  |  1998-08-18  |  7KB  |  262 lines

  1. Procedure _AMOSGRAB_100
  2.    
  3.    
  4.    
  5.    '--- amosgrab v1.00 (18/08/98) 
  6.    '--- rune j. keller (keller@vip.cybercity.dk)
  7.    
  8.    
  9.    
  10.    Dim _PLANES(7)
  11.    Dim _WIDTH(7)
  12.    Dim _HEIGHT(7)
  13.    Dim _POSX(7)
  14.    Dim _POSY(7)
  15.    Dim _OFFX(7)
  16.    Dim _OFFY(7)
  17.    Dim _HIDDEN(7)
  18.    
  19.    
  20.    
  21.    '--- bobs to check 
  22.    
  23.    _MAXBOBS=32
  24.    
  25.    '--- sprites to check
  26.    
  27.    _MAXSPRITES=8
  28.    
  29.    '--- create logfile? 
  30.    
  31.    _LOGFILE=True
  32.    
  33.    '--- destination directory 
  34.    
  35.    _DIR$="T:"
  36.    
  37.    
  38.    
  39.    '--- delete old grabs
  40.    
  41.    For _SCREEN=0 To 7
  42.       
  43.       If Exist(_DIR$+"AMOSGrab_"+Str$(_SCREEN)-" "+".LBM")
  44.          
  45.          Kill _DIR$+"AMOSGrab_"+Str$(_SCREEN)-" "+".LBM"
  46.          
  47.       End If 
  48.       
  49.    Next 
  50.    
  51.    
  52.    
  53.    If _LOGFILE=True
  54.       
  55.       Open Out 1,_DIR$+"AMOSGrab_Log.TXT"
  56.       
  57.       Print #1,"AMOSGrab 1.00 (18/08/98)"
  58.       Print #1,"Rune J. Keller (keller@vip.cybercity.dk)"
  59.       Print #1,"Logfile"
  60.       
  61.       Close 1
  62.       
  63.    End If 
  64.    
  65.    
  66.    
  67.    '--- check all screens 
  68.    
  69.    For _SCREEN=0 To 7
  70.       
  71.       Trap Screen _SCREEN
  72.       
  73.       '--- if screen exists    
  74.       
  75.       If Errtrap=0
  76.          
  77.          _PLANES(_SCREEN)=Peek(Screen Base+$51)
  78.          _POSX(_SCREEN)=Deek(Screen Base+$C2)
  79.          _POSY(_SCREEN)=Deek(Screen Base+$C4)
  80.          _WIDTH(_SCREEN)=Deek(Screen Base+$C8)
  81.          _HEIGHT(_SCREEN)=Deek(Screen Base+$CA)
  82.          _OFFX(_SCREEN)=Deek(Screen Base+$CE)
  83.          _OFFY(_SCREEN)=Deek(Screen Base+$D0)
  84.          
  85.          If Peek(Screen Base+$B4)=$80
  86.             _HIDDEN(_SCREEN)=True
  87.          End If 
  88.          
  89.          If _LOGFILE=True
  90.             
  91.             Append 1,_DIR$+"AMOSGrab_Log.TXT"
  92.             
  93.             Print #1,""
  94.             Print #1,"Screen ";_SCREEN
  95.             
  96.             If _HIDDEN(_SCREEN)=True
  97.                Print #1,"Hidden"
  98.             End If 
  99.             
  100.             Print #1,"Planes ";_PLANES(_SCREEN)
  101.             Print #1,"PosX   ";_POSX(_SCREEN)
  102.             Print #1,"PosY   ";_POSY(_SCREEN)
  103.             Print #1,"Width  ";_WIDTH(_SCREEN)
  104.             Print #1,"Height ";_HEIGHT(_SCREEN)
  105.             Print #1,"OffX   ";_OFFX(_SCREEN)
  106.             Print #1,"OffY   ";_OFFY(_SCREEN)
  107.             
  108.             Close 1
  109.             
  110.          End If 
  111.          
  112.       End If 
  113.       
  114.    Next 
  115.    
  116.    
  117.    
  118.    '--- get free screen to work on
  119.    
  120.    For _DEST=0 To 7
  121.       
  122.       '--- found free screen 
  123.       
  124.       If _PLANES(_DEST)=0
  125.          
  126.          '--- get source screens
  127.          
  128.          For _SOURCE=0 To 7
  129.             
  130.             If _PLANES(_SOURCE)>0
  131.                
  132.                '--- open new work screen
  133.                
  134.                Screen Open _DEST,_WIDTH(_SOURCE),_HEIGHT(_SOURCE),2^_PLANES(_SOURCE),Lowres
  135.                
  136.                Screen Hide _DEST
  137.                
  138.                '--- copy layers 
  139.                
  140.                Screen Copy _SOURCE,_OFFX(_SOURCE),_OFFY(_SOURCE),_OFFX(_SOURCE)+_WIDTH(_SOURCE),_OFFY(_SOURCE)+_HEIGHT(_SOURCE) To _DEST,0,0
  141.                
  142.                Screen _DEST
  143.                
  144.                '--- copy bobs and sprites 
  145.                
  146.                If _HIDDEN(_SOURCE)=False
  147.                   
  148.                   '--- get bobs on screen
  149.                   
  150.                   For _BOB=0 To _MAXBOBS-1
  151.                      
  152.                      Trap _IMAGE=I Bob(_BOB)
  153.                      
  154.                      If Errtrap=0 and _IMAGE<>0
  155.                         
  156.                         _REV=0
  157.                         
  158.                         _IMAGE=I Bob(_BOB)
  159.                         
  160.                         '--- bob is reversed 
  161.                         
  162.                         If _IMAGE<0
  163.                            
  164.                            If _IMAGE<0 and _IMAGE>-$4000
  165.                               _IMAGE=_IMAGE+$4000
  166.                               _REV=$4000
  167.                            Else If _IMAGE<$4000 and _IMAGE>-$8000
  168.                               _IMAGE=_IMAGE+$8000
  169.                               _REV=$8000
  170.                            Else If _IMAGE<-$8000
  171.                               _IMAGE=_IMAGE+$C000
  172.                               _REV=$C000
  173.                            End If 
  174.                            
  175.                         End If 
  176.                         
  177.                         _POSX=X Bob(_BOB)
  178.                         _POSY=Y Bob(_BOB)
  179.                         
  180.                         '--- get hot spot
  181.                         
  182.                         _HOTSPOTX=Deek(Leek(Start(1)+2+(_IMAGE-1)*8)+6)
  183.                         _HOTSPOTY=Deek(Leek(Start(1)+2+(_IMAGE-1)*8)+8)
  184.                         
  185.                         '--- remove the flipping flags 
  186.                         
  187.                         If _HOTSPOTX>$C000
  188.                            _HOTSPOTX=_HOTSPOTX-$C000
  189.                         Else If _HOTSPOTX>$8000
  190.                            _HOTSPOTX=_HOTSPOTX-$8000
  191.                         Else If _HOTSPOTX>$4000
  192.                            _HOTSPOTX=_HOTSPOTX-$4000
  193.                         End If 
  194.                         
  195.                         _POSX=_POSX-_HOTSPOTX
  196.                         _POSY=_POSY-_HOTSPOTY
  197.                         
  198.                         Paste Bob _POSX-_OFFX(_SOURCE),_POSY-_OFFY(_SOURCE),_IMAGE+_REV
  199.                         
  200.                      End If 
  201.                      
  202.                   Next 
  203.                   
  204.                   '--- get sprites on screen 
  205.                   
  206.                   For _SPRITE=0 To _MAXSPRITES-1
  207.                      
  208.                      Trap _IMAGE=I Sprite(_SPRITE)
  209.                      
  210.                      If Errtrap=0 and _IMAGE<>0
  211.                         
  212.                         _IMAGE=I Sprite(_SPRITE)
  213.                         _POSX=X Screen(X Sprite(_SPRITE),_SOURCE)
  214.                         _POSY=Y Screen(Y Sprite(_SPRITE),_SOURCE)
  215.                         
  216.                         _HOTSPOTX=Deek(Leek(Start(1)+2+(_IMAGE-1)*8)+6)
  217.                         _HOTSPOTY=Deek(Leek(Start(1)+2+(IMAGE-1)*8)+8)
  218.                         
  219.                         _POSX=_POSX-_HOTSPOTX
  220.                         _POSY=_POSY-_HOTSPOTY
  221.                         
  222.                         Paste Bob _POSX-_OFFX(_SOURCE),_POSY-_OFFY(_SOURCE),_IMAGE
  223.                         
  224.                      End If 
  225.                      
  226.                   Next 
  227.                   
  228.                End If 
  229.                
  230.                '--- get correct palette 
  231.                
  232.                Screen _DEST
  233.                
  234.                Get Palette _SOURCE
  235.                
  236.                '--- save work screen
  237.                
  238.                Save Iff _DIR$+"AMOSGrab_"+Str$(_SOURCE)-" "+".LBM"
  239.                
  240.                '--- close old work screen 
  241.                
  242.                Screen Close _DEST
  243.                
  244.             End If 
  245.             
  246.          Next 
  247.          
  248.          Exit 
  249.          
  250.       End If 
  251.       
  252.    Next 
  253.    
  254.    
  255.    
  256.    '--- no free screen to work on!
  257.    
  258.    If _DEST=8 Then Pop Proc[-1]
  259.    
  260.    
  261.    
  262. End Proc[0]